﻿//.原地移除数组中所有的元素val，要求时间复杂度为O(N)，空间复杂度为O(1)
//https://leetcode.cn/problems/remove-element/
#include <stdio.h>
//输入：nums = [3, 2, 2, 3], val = 3
//输出：2, nums = [2, 2, _, _]
//解释：你的函数函数应该返回 k = 2, 并且 nums 中的前两个元素均为 2。
//你在返回的 k 个元素之外留下了什么并不重要（因此它们并不计入评测）。

int removeElement(int* nums, int numsSize, int val) 
{
	int dct, scr;
	dct = scr = 0;

	while (scr < numsSize)
	{

		if (nums[scr] != val)
		{
			if (dct != scr)
				nums[dct] = nums[scr];
			dct++;
		}
		scr++;
	}
	return dct;
}

//2.删除排序数组中的重复项
//https://leetcode.cn/problems/remove-duplicates-from-sorted-array/description/
//输入：nums = [1, 1, 2]
//输出：2, nums = [1, 2, _]
//解释：函数应该返回新的长度 2 ，并且原数组 nums 的前两个元素被修改为 1,

int removeDuplicates(int* nums, int numsSize) 
{
	int dct, scr;
	dct = scr = 0;
	
	while (scr < numsSize)
	{
		if (nums[dct] != nums[scr])
		{
			dct++;
			nums[dct] = nums[scr];
		}
		scr++;
	}
	return dct+1;
}
//3.合并两个有序数组
//https://leetcode.cn/problems/merge-sorted-array/description/
//输入：nums1 = [1, 2, 3, 0, 0, 0], m = 3, nums2 = [2, 5, 6], n = 3
//输出：[1, 2, 2, 3, 5, 6]
//解释：需要合并[1, 2, 3] 和[2, 5, 6] 。
//合并结果是[1, 2, 2, 3, 5, 6] ，其中斜体加粗标注的为 nums1 中的元素。

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) 
{
	int l1 = m-1;
	int l2 = n-1;
	int l3 = m + n - 1;
	while (l1 >= 0 && l2 >= 0)
	{
		if (nums2[l2] > nums1[l1])
		{
			nums1[l3--] = nums2[l2--];
		}
		else
		{
			nums1[l3--] = nums1[l1--];
		}
	}
	while (l2 >= 0)
	{
		nums1[l3--] = nums2[l2--];
	}
}

int main()
{

	return 0;
}
